1627e5
@@ -22,14 +22,11 @@
import java.util.ArrayList;
 import java.util.ListIterator;
 import java.util.Map;
 
+import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.Source;
-import javax.xml.transform.TransformerException;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stax.StAXSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.w3c.dom.Document;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.StreamCache;
@@ -38,18 +35,17 @@
import org.apache.camel.converter.jaxp.XmlConverter;
 import org.apache.camel.converter.stream.CachedOutputStream;
 import org.apache.camel.converter.stream.StreamSourceCache;
 import org.apache.cxf.staxutils.StaxSource;
+import org.apache.cxf.staxutils.StaxUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 
 public class CachedCxfPayload<T> extends CxfPayload<T> implements StreamCache {
     private static final Logger LOG = LoggerFactory.getLogger(CachedCxfPayload.class);
-    private final XmlConverter xml;
 
     public CachedCxfPayload(CxfPayload<T> orig, Exchange exchange, XmlConverter xml) {
         super(orig.getHeaders(), new ArrayList<Source>(orig.getBodySources()), orig.getNsMap());
         ListIterator<Source> li = getBodySources().listIterator();
-        this.xml = xml;
         while (li.hasNext()) {
             Source source = li.next();
             XMLStreamReader reader = null;
@@ -67,22 +63,22 @@
public class CachedCxfPayload<T> extends CxfPayload<T> implements StreamCache {
             if (reader != null) {
                 Map<String, String> nsmap = getNsMap();
                 if (nsmap != null && !(reader instanceof DelegatingXMLStreamReader)) {
-                    source = new StAXSource(new DelegatingXMLStreamReader(reader, nsmap));
+                    reader = new DelegatingXMLStreamReader(reader, nsmap);
                 }
                 CachedOutputStream cos = new CachedOutputStream(exchange);
-                StreamResult sr = new StreamResult(cos);
                 try {
-                    xml.toResult(source, sr);
+                    StaxUtils.copy(reader, cos);
                     li.set(new StreamSourceCache(cos.newStreamCache()));
-                } catch (TransformerException e) {
+                } catch (XMLStreamException e) {
                     LOG.error("Transformation failed ", e);
                 } catch (IOException e) {
                     LOG.error("Cannot Create StreamSourceCache ", e);
                 }
+
             } else if (!(source instanceof DOMSource)) {
-                Document document = exchange.getContext().getTypeConverter().convertTo(Document.class, exchange, source);
+                DOMSource document = exchange.getContext().getTypeConverter().convertTo(DOMSource.class, exchange, source);
                 if (document != null) {
-                    li.set(new DOMSource(document));
+                    li.set(document);
                 }
             }
         }
@@ -91,7 +87,6 @@
public class CachedCxfPayload<T> extends CxfPayload<T> implements StreamCache {
     private CachedCxfPayload(CachedCxfPayload<T> orig, Exchange exchange) throws IOException {
         super(orig.getHeaders(), new ArrayList<Source>(orig.getBodySources()), orig.getNsMap());
         ListIterator<Source> li = getBodySources().listIterator();
-        this.xml = orig.xml;
         while (li.hasNext()) {
             Source source = li.next();
             if (source instanceof StreamCache) {
@@ -119,10 +114,9 @@
public class CachedCxfPayload<T> extends CxfPayload<T> implements StreamCache {
         if (body instanceof StreamCache) {
             ((StreamCache) body).writeTo(os);
         } else {
-            StreamResult sr = new StreamResult(os);
             try {
-                xml.toResult(body, sr);
-            } catch (TransformerException e) {
+                StaxUtils.copy(body, os);
+            } catch (XMLStreamException e) {
                 throw new IOException("Transformation failed", e);
             }
         }
